#include <bits/stdc++.h> 
using namespace std;
typedef long long ll;
inline int read() {
	int res=0; bool pdf=0; char ch=getchar();
	while(ch<'0'||ch>'9') pdf=(ch=='-'), ch=getchar();
	while(ch>='0'&&ch<='9') res=(res<<3)+(res<<1)+(ch^48), ch=getchar();
	return pdf?-res:res;
}
const int N=200010, KK=85;
const ll mod=998244353;
ll f[N][KK][2],inv[N],S[KK][KK],fac[N],invf[N],m,K;
int n,to[N],nxt[N],head[N],azz,ns,s[N],pd[N];
inline void adde(int ss,int ee) {
	to[++azz]=ee; nxt[azz]=head[ss]; head[ss]=azz;
	to[++azz]=ss; nxt[azz]=head[ee]; head[ee]=azz;
}
inline ll power(ll ds,ll zs) {
	ll ans=1;
	while(zs) {
		if(zs&1) ans=ans*ds%mod;
		ds=ds*ds%mod;
		zs>>=1;
	}
	return ans;
}
void dfs(int now,int fa) {
	for(int j=0;j<=K;++j) {
		ll qwq=max(m-j,0ll);
		if(pd[now]==1) { f[now][j][1]=1; f[now][j][0]=0; }
		else { if(j!=0) f[now][j][0]=1; f[now][j][1]=1; } 
	}
	for(int i=head[now];i;i=nxt[i]) {
		int v=to[i];
		if(v==fa) continue;
		dfs(v,now);
		for(ll j=0;j<=K;++j) {
			ll qwq=max(m-j,0ll);
		    f[now][j][0]=f[now][j][0]*((f[v][j][0]*(j-1)%mod+f[v][j][1]*(qwq)%mod)%mod)%mod;
			f[now][j][1]=f[now][j][1]*((f[v][j][0]*j%mod+f[v][j][1]*(max(qwq-1,0ll))%mod)%mod)%mod;
		}
	}
}
inline ll C(const ll &nn, const ll &mm) {
	return fac[nn]*invf[mm]%mod*invf[nn-mm]%mod;
}
signed main() {
    freopen("tree.in","r",stdin);
    freopen("tree.out","w",stdout);
	n=read(); m=read(); K=read(); ns=read();
	for(int i=1;i<=ns;++i) s[i]=read(), pd[s[i]]=1;
	for(int i=1;i<n;++i) {
		int ts=read(), te=read();
		adde(ts,te);
	}
	for(int i=1;i<=m;++i) inv[i]=power(i,mod-2);
	S[0][0]=1; for(int i=1;i<=K;++i) for(int j=1;j<=i;++j) S[i][j]=(S[i-1][j-1]+(1ll*j*S[i-1][j])%mod)%mod;
	fac[0]=1; for(int i=1;i<=max(m,K);++i) fac[i]=fac[i-1]*i%mod;
	invf[max(m,K)]=power(fac[max(m,K)],mod-2);
	for(int i=max(m,K)-1;i>=0;--i) invf[i]=invf[i+1]*(i+1)%mod;
	dfs(1,0);
	ll ans=0,h;
	for(int j=1;j<=K;++j) {
		h=0;
		for(int i=0;i<=j;++i) {
			if(j<=m) h=((h+((C(j,i)*((i&1)?-1:1)%mod)*(f[1][i][0]*(i)%mod+f[1][i][1]*(m-i)%mod)%mod)%mod)%mod+mod)%mod;
		}
		h=(((h*C(m,j)%mod)*S[K][j]%mod)*fac[j])%mod;
		ans=(ans+h)%mod;
	}
	printf("%lld\n",ans);
	return 0;
}
